gtk-demo: Add a demo for tabs
authorMatthias Clasen <mclasen@redhat.com>
Tue, 29 Nov 2016 21:39:21 +0000 (16:39 -0500)
committerMatthias Clasen <mclasen@redhat.com>
Tue, 29 Nov 2016 21:40:24 +0000 (16:40 -0500)
One of the least-appreciated features in pango.
It deserves a demo.

demos/gtk-demo/Makefile.am
demos/gtk-demo/demo.gresource.xml
demos/gtk-demo/tabs.c [new file with mode: 0644]

index 61c33ec992ecf708e95f3529ed1f74becf9b4a90..b14473ace907d22f54350fd1223fa9e8fb9d1cb0 100644 (file)
@@ -62,6 +62,7 @@ demos_base =                                  \
        spinbutton.c                            \
        spinner.c                               \
        stack.c                                 \
+       tabs.c                                  \
        textmask.c                              \
        textview.c                              \
        textscroll.c                            \
index c4ab36cb7d6f6096a2592dfa438967ed7dfbdb37..44bef45a1f4984667929f035d5204bcacbbce74f 100644 (file)
     <file>stack.c</file>
     <file>spinbutton.c</file>
     <file>spinner.c</file>
+    <file>tabs.c</file>
     <file>textview.c</file>
     <file>textscroll.c</file>
     <file>theming_style_classes.c</file>
diff --git a/demos/gtk-demo/tabs.c b/demos/gtk-demo/tabs.c
new file mode 100644 (file)
index 0000000..c1b511d
--- /dev/null
@@ -0,0 +1,63 @@
+/* Text View/Tabs
+ *
+ * GtkTextView can position text at fixed positions, using tabs.
+ */
+
+#include <gtk/gtk.h>
+#include <gdk/gdkkeysyms.h>
+
+GtkWidget *
+do_tabs (GtkWidget *do_widget)
+{
+  static GtkWidget *window = NULL;
+
+  if (!window)
+    {
+      GtkWidget *view;
+      GtkWidget *sw;
+      GtkTextBuffer *buffer;
+      PangoTabArray *tabs;
+
+      window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+      gtk_window_set_title (GTK_WINDOW (window), "Tabs");
+      gtk_window_set_screen (GTK_WINDOW (window),
+                             gtk_widget_get_screen (do_widget));
+      gtk_window_set_default_size (GTK_WINDOW (window), 450, 450);
+
+      g_signal_connect (window, "destroy",
+                        G_CALLBACK (gtk_widget_destroyed), &window);
+
+      gtk_container_set_border_width (GTK_CONTAINER (window), 0);
+
+      view = gtk_text_view_new ();
+      gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (view), GTK_WRAP_WORD);
+      gtk_text_view_set_left_margin (GTK_TEXT_VIEW (view), 20);
+      gtk_text_view_set_right_margin (GTK_TEXT_VIEW (view), 20);
+
+      tabs = pango_tab_array_new (3, TRUE);
+      pango_tab_array_set_tab (tabs, 0, PANGO_TAB_LEFT, 0);
+      pango_tab_array_set_tab (tabs, 1, PANGO_TAB_LEFT, 150);
+      pango_tab_array_set_tab (tabs, 2, PANGO_TAB_LEFT, 300);
+      gtk_text_view_set_tabs (GTK_TEXT_VIEW (view), tabs);
+      pango_tab_array_free (tabs);
+
+      buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
+      gtk_text_buffer_set_text (buffer, "one\ttwo\tthree\nfour\tfive\tsix\nseven\teight\tnine", -1);
+
+      sw = gtk_scrolled_window_new (NULL, NULL);
+      gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
+                                      GTK_POLICY_AUTOMATIC,
+                                      GTK_POLICY_AUTOMATIC);
+      gtk_container_add (GTK_CONTAINER (window), sw);
+      gtk_container_add (GTK_CONTAINER (sw), view);
+
+      gtk_widget_show_all (sw);
+    }
+
+  if (!gtk_widget_get_visible (window))
+    gtk_widget_show (window);
+  else
+    gtk_widget_destroy (window);
+
+  return window;
+}